import router from '@/router';
import { userInfo } from '@/model/index';
// 进度条
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import setting from './setting';
import { GET_TOKEN } from './utils/token';
import { nextTick } from 'vue';
import { login } from '@/utils/login.js';


NProgress.configure({ showSpinner: false });

// 全局前置守卫: 进入 to对应的路由 前
router.beforeEach(async (to, from, next) => {
  // to:    将要跳转的路由
  // from:  现在的路由
  // next:  路由放行函数，确保每一次进入守卫都要有放行函数
  // console.log('前置守卫', to, from, next)

  NProgress.start()


  const token = GET_TOKEN()

  // 是否拥有登录凭证
  if (token) {
    if (to.name === 'Login') {
      next({ ...from })
    } else {
      // 是否拥有权限信息
      if (userInfo.vm.status === 2) {
        next()
      } else {
        try {
          await userInfo.load()
          next()
        } catch (error) {
          console.log('error', error)
          userInfo.logout()
          next({ name: 'Login' })
        }

      }
    }
  } else {
    // 前往获取登录凭证

    login()

    next()


    // if (to.path == '/login') {
    //   next()
    // } else {
    //   next({ path: '/login' })
    // }
  }



  // const userStore = useUserStore()
  // const token = userStore.token
  // const username = userStore.userInfo.name

  // // 有没有登录
  // if (token) {
  //   // 登录了，不能回登录
  //   if (to.name == 'Login') {
  //     next({ ...from })
  //   } else {
  //     // 去其他路由
  //     if (username) {
  //       // 有数据，直接放行
  //       next()
  //     } else {
  //       try {
  //         // 没数据，请求数据
  //         await userStore.reqUserInfo()
  //         // 请求成功就放行

  //         // 防止动态路由未实现，而引起的路由匹配不上报错，引导到/404
  //         router.resolve(to)

  //         next({ ...to })
  //       } catch (error) {
  //         // 请求用户信息报错，token过期了，请求不到数据，退出登录，重新登录
  //         console.log('token过期', typeof error, error)

  //         if (error.message.includes('No match')) {
  //           // router.resolve(to)引导到这里
  //           next('/404')
  //         } else {
  //           await userStore.reqLogout()
  //           next({ name: 'Login', query: { redirect: to.path } })
  //         }
  //       }
  //     }
  //   }
  // } else {
  //   // 没登陆
  //   if (to.name == 'Login') {
  //     next()
  //   } else {
  //     next({ name: 'Login', query: { redirect: from.query.redirect || to.name } })
  //   }
  // }


})

// 全局后置守卫: 已经进入 to对应的路由
router.afterEach((to, from) => {
  // to:    将要跳转的路由
  // from:  现在的路由
  // console.log('后置守卫', to, from)
  NProgress.done()

  document.title = `${setting.title}-${to.meta.title}`

})